#include <stdio.h>

void insertionSortWithSentinel(int arr[], int n) {
    // 创建一个哨兵
    int sentinel = arr[0]; // 将第一个元素设为哨兵
    arr[0] = arr[1]; // 将第二个元素赋值给第一个位置

    for (int i = 1; i < n; i++) {
        // 使用哨兵，当前元素
        int current = arr[i];
        int j = i - 1;

        // 移动大于当前元素的元素
        while (j >= 0 && arr[j] > current) {
            arr[j + 1] = arr[j];
            j--;
        }

        // 插入当前元素
        arr[j + 1] = current;
    }

    // 恢复哨兵值
    arr[0] = sentinel;
}

void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {5, 2, 9, 1, 5, 6};
    int n = sizeof(arr) / sizeof(arr[0]);

    printf("Original array:\n");
    printArray(arr, n);

    insertionSortWithSentinel(arr, n);

    printf("Sorted array:\n");
    printArray(arr, n);

    return 0;
}
